﻿// -----------------------------------------------------------------------
// <copyright file="PostHandler.cs" company="">
// TODO: Update copyright text.
// Перевіряє чи правильний логін і пароль....не докінця коректно паше але наразі нормально.Поправлю щоб точне логування було
// після логінення кидає на сторінку з помилкою або на сторінку де пише шо ти залогінився
// </copyright>
// -----------------------------------------------------------------------

namespace WebServer.BusinessLogic.Handlers
{
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using WebServer.BusinessLogic.Web;
    using WebServer.BusinessLogic.Logs;

    /// <summary>
    /// TODO: Update summary.
    /// </summary>
    public class AdminHandler:Handler
    {
        public override Response Handle(Request request)
        {

            if (request.HttpMetod==EnumHttpMetod.POST)
            {
                string temp_login = String.Join("login=", Configurator.Instance.AdminLogin);
                string temp_password = String.Join("password=", Configurator.Instance.AdminPassword);
               
                if (request.RawData.Contains(temp_login)&&request.RawData.Contains(temp_password))
                {
                    string filePath = Configurator.Instance.RelativeWwwPath + "\\admin\\Loggined.html";
                    string text = File.ReadAllText(filePath);
                    Byte[] data = this.TextToByteArray(text, Encoding.ASCII);
                    string MIMEType = "text/html";
                    string version = request.HttpVersion;

                    // remember session
                    var resp = new Response(MIMEType, version, data);
                    var s = SessionManager.Instance.CreateSession(request, resp);
                    s.IsAdmin = true;
                    SessionManager.Instance.UpdateSession(request, s);

                    // log successful attempt
                    Logger.Instance.Log(string.Format("-> Admin logged in with IP {0}. Session key is {1}", request.UserIpAddress, s.SessionKey));

                    // move user to sessioned page if IsCookieless
                    if (SessionManager.Instance.IsCookieless)
                    {
                        //create temporary redirect, according to HTTP/1.0 specification
                        resp.HttpResponseCode = 302;
                        resp.HttpResponseCodeDescription = "Found";

                        resp.Location = string.Format("/[{0}]/{1}", s.SessionKey, request.HttpPath.TrimStart(new[]{'/'}));
                    }

                    return resp;
                }
                else
                {
                    string filePath = Configurator.Instance.RelativeWwwPath + "\\admin\\error.html";
                    string text = File.ReadAllText(filePath);
                    Byte[] data = this.TextToByteArray(text, Encoding.ASCII);
                    string MIMEType = "text/html";
                    string version = request.HttpVersion;
                    return new Response(MIMEType, version, data);
                }
            }

            if (request.HttpMetod == EnumHttpMetod.GET)
            {
                if (request.HttpPath.StartsWith("/admin/Logout.htm"))
                {
                    var session = SessionManager.Instance.GetCurrentSession(request);

                    // log logging out process
                    Logger.Instance.Log(string.Format("<- Admin logged out with IP {0}", request.UserIpAddress));

                    var resp = new Response();
                    resp.Data = ASCIIEncoding.ASCII.GetBytes("You have been logged out");
                    SessionManager.Instance.DeleteSession(session.SessionKey, request, resp);
                    return resp;
                }
            }
            
            return this.NextHandler.Handle(request);
            
            
        }

    }
}
